#pragma once

#include "Data/Data.hpp"
#include "Common/Savable.hpp"
#include "Common/Point2D.hpp"

/** @class Point2DData
  * @brief Класс данных двумерной точки
  */
class Point2DData : public Data, public Point2D, public Savable
{
public:
    /**
      * Конструктор по умолчанию
      * Создает точку (0,0)
      */
    Point2DData();

    /**
      * Конструктор, создающий точку (x,y)
      */
    Point2DData(double x, double y);

    /**
      * Конструктор копирования
      */
    Point2DData(const Point2DData &p);

    /**
      * Установить значение абсциссы
      *
      * @param x абсцисса
      */
    virtual void setX(double x);

    /**
      * Устрановить значение ординаты
      *
      * @param y ордината
      */
    virtual void setY(double y);

    /**
      * Загрузка объекта
      *
      * @param in поток, из которого необходимо считать объект
      */
    virtual int load(std::istream& in);

    /**
      * Сохранение объекта
      *
      * @param out поток, в который необходимо сохранить объект
      */
    virtual int save(std::ostream& out) const;
};
